package jers;

import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * Interface para um objeto {@link Callback}.
 * <p>
 * Este objeto implementa a chamada de notificacao de retorno da execucao 
 * de um servico. Ao executar um servico pelo metodo 
 * {@link Service#dispatch(Job, Callback)}, deve-se passar uma instancia 
 * remota desse interface para que o servidor ao finalizar o trabalho,
 * notifique de volta o cliente.
 * <br>
 * Uma instancia do objeto {@link Callback} pode ser construida pela fabrica 
 * {@link Factory}.
 * <br>
 * Um {@link Callback} e basicamente um objeto que implementa a 
 * interface {@link Remote} e {@link Serializable} no lado do cliente.
 * </p>
 * 
 * @see {@link Factory}, {@link Serializable}, {@link Remote}
 * 
 * @author 
 * 		<a href="mailto:felipe.zappala@gmail.com">
 * 			Luis Felipe Zappala
 * 		</a> [ <a href="http://lncc.br/ist">ISTCC-P</a> / 2009 ]
 */
public interface Callback extends Remote, Serializable {

	/**
	 * E invocado para notificar o cliente local sobre o resultado da 
	 * execucao de um trabalho {@link Job} por um servico {@link Service}
	 * no servidor remoto.
	 * 
	 * @param 
	 * 		result - O objeto {@link Result} com os resultados da execucao.
	 * @throws 
	 * 		RemoteException caso um erro ocorra.
	 */
	public void call(Result result) throws RemoteException;
	
}
